﻿using DHQGHN.Common;
using DHQGHN.DAL.BO.Admin;
using DHQGHN.DAL.BO.DHQG;
using DHQGHN.DAL.Common;
using DHQGHN.DAL.Models.DHQG;
using DHQGHN.PM2.Models;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;
using System.Web.Script.Serialization;

namespace DHQGHN.PM2.Controllers
{
    public class DonViController : BaseController
    {
        public ActionResult Index(DonViModel a = null, int pageIndex = 0, string sort = "Id", string sortDir = "ASC", string curentID = "")
        {
            ViewBag.ActiveMenus = ViewBag.ActiveMenus == null ? new System.Collections.Hashtable() : ViewBag.ActiveMenus;
            //ViewBag.ActiveMenus[13] = "active";
            //ViewBag.ActiveMenus[249] = "active";
            
            string strInputMenuUrl = "/DonVi/Index";
            List<DHQGHN.PM2.Models.MenuModel> listMenu = Session["MenuList"] as List<DHQGHN.PM2.Models.MenuModel>;
            if (listMenu.Count > 0)
            {
                for (int i = 0; i < listMenu.Count; i++)
                {
                    if (listMenu[i].MenuUrl.ToUpper().Equals(strInputMenuUrl.ToUpper()))
                    {
                        ViewBag.ActiveMenus[listMenu[i].ParentMenuId] = "active";
                        ViewBag.ActiveMenus[listMenu[i].MenuId] = "active";
                        ViewBag.CurrentMenuName = listMenu[i].MenuName;
                        ViewBag.Title = listMenu[i].MenuName;
                    }
                }
            }


            //a.DELETED = 2;
            //a.Levels = 0;
            _sqlBO = new DonViBO();
            _sqlNhomDVBO = new NhomDonViBO();

            //chi su dung danh sach nhom co ban de tim kiem don vi
            //List<NhomDonVi> items = _sqlNhomDVBO.GetAll();
            List<NhomDonVi> items = _sqlNhomDVBO.GetNhomDVByType_New(1);

            List<SelectListItem> lstNhomDonVi = new List<SelectListItem>();
            lstNhomDonVi.Add(new SelectListItem
            {
                Text = "Chọn nhóm đơn vị",
                Value = "0"
            });
            for (int i = 0; i < items.Count; i++)
            {
                lstNhomDonVi.Add(new SelectListItem
                {
                    Text = items[i].TenNhomDonVi,
                    Value = items[i].NhomDonViId.ToString()
                });
            }

            ViewBag.lstNhomDonVi = lstNhomDonVi;

            //load trang ban dau thi tim tat ca
            a.IntCoQuyenGiamSat = 3;
            var model = Search(a, pageIndex, curentID, false);
            return View(model);
        }

        [HttpPost]
        public ActionResult CreatePopupUpdate(string id)
        {
            _sqlBO = new DonViBO();
            _sqlNhomDVBO = new NhomDonViBO();

            DonViModel model = null;
            if (!(String.IsNullOrEmpty(id) || String.IsNullOrWhiteSpace(id)))
            {
                model = new DonViModel(_sqlBO.GetById(Convert.ToInt32(id)));
            }
            if (model == null)
            {
                model = new DonViModel();
                
            }
            if (Request.IsAjaxRequest())
            {
                return PartialView(model);
            }
            return View(model);
        }

        [HttpPost]
        public ActionResult CapNhatNhomDonVi(string id)
        {
            _sqlBO = new DonViBO();
            _sqlNhomDVBO = new NhomDonViBO();

            //lay danh sach nhom don vi co ban
            List<NhomDonVi> items = _sqlNhomDVBO.GetNhomDVByType_New(1);
            List<SelectListItem> lstNhomDonViCoBan = new List<SelectListItem>();
            lstNhomDonViCoBan.Add(new SelectListItem
            {
                Text = "Chọn nhóm đơn vị cơ bản",
                Value = ""
            });

            for (int i = 0; i < items.Count; i++)
            {
                lstNhomDonViCoBan.Add(new SelectListItem
                {
                    Text = items[i].TenNhomDonVi,
                    Value = items[i].NhomDonViId.ToString()
                });
            }
            ViewBag.lstNhomDonVi = lstNhomDonViCoBan;

            //model cua form popup
            DonViModel model = new DonViModel();
            //lay danh sach nhom don vi tu bang DonVi left join voi bang DONVI_NHOMDONVI
            int intDonViID = (String.IsNullOrEmpty(id) || String.IsNullOrWhiteSpace(id)) ? 0 : Convert.ToInt32(id);
            model.DonViId = intDonViID;
            model.listNhomDonVi = new List<NhomDonViModel>();
            
            List<NhomDonVi> listAllNhomDonVi = _sqlNhomDVBO.GetAllNhomByDonViID(intDonViID);
            if (listAllNhomDonVi.Count > 0)
            {
                for (int i = 0; i < listAllNhomDonVi.Count; i++)
                {
                    if (listAllNhomDonVi[i].IS_CHECKED == 1 && listAllNhomDonVi[i].IS_CO_BAN == 1)
                    {
                        model.NhomDonViId = listAllNhomDonVi[i].NhomDonViId;
                    }
                    
                    if (listAllNhomDonVi[i].IS_CO_BAN == 0)
                    {
                        model.listNhomDonVi.Add(new NhomDonViModel(listAllNhomDonVi[i]));
                    }
                 }
            }
            
            //if (!(String.IsNullOrEmpty(id) || String.IsNullOrWhiteSpace(id)))
            //{
            //    //model = new DonViModel(_sqlBO.GetById(Convert.ToInt32(id)));
            //    //model = new NhomDonViViewModel(_sqlBO.GetById(Convert.ToInt32(id)));
            //    model = null;
            //}
            //if (model == null)
            //{
            //    model = new DonViModel();
            //}

            if (Request.IsAjaxRequest())
            {
                return PartialView(model);
            }
            return View(model);
        }

        public ActionResult PhanQuyenChucNang()
        {
            ViewBag.ActiveMenus = ViewBag.ActiveMenus == null ? new System.Collections.Hashtable() : ViewBag.ActiveMenus;
            
            string strInputMenuUrl = "/DonVi/PhanQuyenChucNang";
            List<DHQGHN.PM2.Models.MenuModel> listMenu = Session["MenuList"] as List<DHQGHN.PM2.Models.MenuModel>;
            if (listMenu.Count > 0)
            {
                for (int i = 0; i < listMenu.Count; i++)
                {
                    if (listMenu[i].MenuUrl.ToUpper().Equals(strInputMenuUrl.ToUpper()))
                    {
                        ViewBag.ActiveMenus[listMenu[i].ParentMenuId] = "active";
                        ViewBag.ActiveMenus[listMenu[i].MenuId] = "active";
                        ViewBag.CurrentMenuName = listMenu[i].MenuName;
                        ViewBag.Title = listMenu[i].MenuName;
                    }
                }
            }

            _sqlBO = new DonViBO();
            _sqlNhomDVBO = new NhomDonViBO();

            //lay danh sach nhom don vi co ban
            List<NhomDonVi> items = _sqlNhomDVBO.GetNhomDVByType_New(1);
            List<SelectListItem> lstNhomDonViCoBan = new List<SelectListItem>();
            lstNhomDonViCoBan.Add(new SelectListItem
            {
                Text = "Chọn nhóm đơn vị cơ bản",
                Value = ""
            });

            for (int i = 0; i < items.Count; i++)
            {
                lstNhomDonViCoBan.Add(new SelectListItem
                {
                    Text = items[i].TenNhomDonVi,
                    Value = items[i].NhomDonViId.ToString()
                });
            }
            ViewBag.lstNhomDonVi = lstNhomDonViCoBan;

            //model cua form popup
            DonViModel model = new DonViModel();

            List<SelectListItem> lstDonVi = new List<SelectListItem>();
            lstDonVi.Add(new SelectListItem
            {
                Text = "Chọn đơn vị",
                Value = ""
            });
            ViewBag.lstDonVi = lstDonVi;

            
            ////lay danh sach nhom don vi tu bang DonVi left join voi bang DONVI_NHOMDONVI
            //int intDonViID = (String.IsNullOrEmpty(id) || String.IsNullOrWhiteSpace(id)) ? 0 : Convert.ToInt32(id);
            //model.DonViId = intDonViID;
            //model.listNhomDonVi = new List<NhomDonViModel>();

            //List<NhomDonVi> listAllNhomDonVi = _sqlNhomDVBO.GetAllNhomByDonViID(intDonViID);
            //if (listAllNhomDonVi.Count > 0)
            //{
            //    for (int i = 0; i < listAllNhomDonVi.Count; i++)
            //    {
            //        if (listAllNhomDonVi[i].IS_CHECKED == 1 && listAllNhomDonVi[i].IS_CO_BAN == 1)
            //        {
            //            model.NhomDonViId = listAllNhomDonVi[i].NhomDonViId;
            //        }

            //        if (listAllNhomDonVi[i].IS_CO_BAN == 0)
            //        {
            //            model.listNhomDonVi.Add(new NhomDonViModel(listAllNhomDonVi[i]));
            //        }
            //    }
            //}

            //if (Request.IsAjaxRequest())
            //{
            //    return PartialView(model);
            //}
            return View(model);
        }

        [HttpPost]
        public JsonResult GetGroupByDonViID(string strDonViID)
        {
            try
            {
                int intDonViID = 0;
                _sqlBO = new DonViBO();
                if (!string.IsNullOrEmpty(strDonViID))
                {
                    intDonViID = int.Parse(strDonViID);
                }

                //DonViModel model = new DonViModel();
                //model.DonViId = intDonViID;
                //model.listGroups = new List<GroupModel>();
                List<GroupModel> listGroups = new List<GroupModel>();

                if (intDonViID > 0) 
                {
                    //list groupID trong bang DONVI_NHOMNGUOIDUNG
                    List<DonVi> lstGroupID = _sqlBO.GetGroupByDonViID(intDonViID);
                    //list GroupModel trong bang GROUPS thuoc PM0, chi lay nhung nhom nghiep vu
                    GroupBO groupBO = new GroupBO();
                    List<DAL.Models.Admin.GroupModel> temp = groupBO.GetAllAppCode("KH_DHQGHN").Where(g => g.Type == "B").ToList();
                    if (temp.Count > 0)
                    {
                        for (int i = 0; i < temp.Count; i++)
                        {
                            listGroups.Add(new GroupModel(temp[i]));
                        }
                    }

                    if (temp.Count > 0 && lstGroupID.Count > 0)
                    {
                        for (int i = 0; i < listGroups.Count; i++)
                        {
                            for (int j = 0; j < lstGroupID.Count; j++)
                            {
                                if (listGroups[i].GroupId == lstGroupID[j].NhomDonViId)
                                {
                                    listGroups[i].IS_CHECKED = 1;
                                }
                            }
                        }
                    }
                }

                return Json(listGroups, JsonRequestBehavior.AllowGet);
            }
            catch (Exception ex)
            {
                //logger.Error(ex.ToString());
                throw;
                //return null;
            }

        }

        [HttpPost]
        [ValidateInput(false)]
        [AjaxValidateAntiForgeryToken]
        public ActionResult ActionSave(DonViModel model)
        {
            if (Request.IsAjaxRequest())
            {
                _sqlBO = new DonViBO();
                bool result = _sqlBO.Save(model.ToDALModel());
                if (result)
                {
                    if (model.DonViId > 0)
                    {
                        return Json(JsonResponse.Json200("Cập nhật thành công!"));
                    }
                    else
                    {
                        return Json(JsonResponse.Json200("Thêm mới thành công!"));
                    }
                }
                else
                {
                    return Json(JsonResponse.Json500("Xảy ra lỗi trong quá trình xử lý!"));
                }
            }
            return null;
        }

        [HttpPost]
        [ValidateInput(false)]
        [AjaxValidateAntiForgeryToken]
        public ActionResult ActionSaveDonVi(string DonViId, string NhomDonViId, string listNhomDonVi)
        {
            List<int> lstNhomKhac = new List<int>();
            JavaScriptSerializer jss = new JavaScriptSerializer();
            lstNhomKhac.AddRange(jss.Deserialize<List<int>>(listNhomDonVi));

            if (Request.IsAjaxRequest())
            {
                _sqlBO = new DonViBO();
                bool result = _sqlBO.SaveNhomDonVi(Convert.ToInt32(DonViId), Convert.ToInt32(NhomDonViId), lstNhomKhac);
                
                if (result)
                {
                    return Json(JsonResponse.Json200("Cập nhật thành công!"));
                    //if (model.DonViId > 0)
                    //{
                    //    return Json(JsonResponse.Json200("Cập nhật thành công!"));
                    //}
                    //else
                    //{
                    //    return Json(JsonResponse.Json200("Thêm mới thành công!"));
                    //}
                }
                else
                {
                    return Json(JsonResponse.Json500("Xảy ra lỗi trong quá trình xử lý!"));
                }
            }
            return null;
        }

        [HttpPost]
        [ValidateInput(false)]
        [AjaxValidateAntiForgeryToken]
        public ActionResult ActionSaveGroups(string DonViId, string listGroups)
        {
            List<int> lstGroupID = new List<int>();
            JavaScriptSerializer jss = new JavaScriptSerializer();
            lstGroupID.AddRange(jss.Deserialize<List<int>>(listGroups));

            if (Request.IsAjaxRequest())
            {
                _sqlBO = new DonViBO();
                bool result = _sqlBO.SaveGroups(Convert.ToInt32(DonViId), lstGroupID);
                
                if (result)
                {
                    return Json(JsonResponse.Json200("Lưu thành công!"));
                    //if (model.DonViId > 0)
                    //{
                    //    return Json(JsonResponse.Json200("Cập nhật thành công!"));
                    //}
                    //else
                    //{
                    //    return Json(JsonResponse.Json200("Thêm mới thành công!"));
                    //}
                }
                else
                {
                    return Json(JsonResponse.Json500("Xảy ra lỗi trong quá trình xử lý!"));
                }
            }
            return null;
        }

        //[AjaxValidateAntiForgeryToken]
        //public ActionResult ActionDelete(int id)
        //{
        //    if (Request.IsAjaxRequest())
        //    {
        //        _sqlBO = new NhomDonViBO();
        //        bool result = _sqlBO.Delete(id);
        //        if (result)
        //        {
        //            return Json(JsonResponse.Json200("Xóa thành công"));
        //        }
        //        else
        //        {
        //            return Json(JsonResponse.Json500("Xảy ra lỗi trong quá trình xử lý!"));
        //        }
        //    }
        //    return null;
        //}


        [HttpPost]
        public ActionResult ActionSearch(DonViModel model = null, int pageIndex = 0, string sort = "CertificationId", string sortDir = "ASC", string currentId = "")
        {
            var dataPaging = Search(model, pageIndex, currentId, false);
            return PartialView("~/Views/DonVi/_DonViList.cshtml", dataPaging);
        }

        private DonViBO _sqlBO;
        private NhomDonViBO _sqlNhomDVBO;
        private DataPage<DonViModel> Search(DonViModel myModel, int pageIndex, string currentId, bool compareEqual)
        {
            _sqlBO = new DonViBO();

            var DALModel = _sqlBO.GetListPaging(myModel.ToDALModel(), pageIndex, PageSize);
            var models = new DataPage<DonViModel>();
            var lstItem = DALModel.Data;
            foreach (DHQGHN.DAL.Models.DHQG.DonVi item in lstItem)
            {
                models.Data.Add(new DonViModel(item));
            }

            DonViModel model = null;
            if (!String.IsNullOrEmpty(currentId) && models.Data.Count > 0)
            {
                model = models.Data.Find(user => user.NhomDonViId.Equals(currentId));
                models.CustomData = model;
            }
            else
            {
                models.CustomData = myModel;
            }
            if (models.Data.Count > 0)
            {
                //Tao component phan trang
                var pagNative = new Pagination
                {
                    ActionName = "ActionSearch",
                    ModelName = "DonVi",
                    CurrentPage = pageIndex,
                    InputSearchId = "",
                    TagetReLoadId = "certification-list",

                };
                pagNative.TotalRows = models.Data[0].RecordCount;
                pagNative.CurrentRow = models.Data.Count;
                ViewBag.Pagination = pagNative;
            }
            return models;
        }
    }
}